const Menu = require('../models/menu.model');

// 构建菜单树
const buildMenuTree = async (roleMenus) => {
  const menuMap = new Map();
  const tree = [];
  // 获取所有菜单
  const menus = await Menu.findAll();
  // 首先将所有菜单项放入 Map 中，方便后续查找父菜单
  menus.forEach(menu => {
    // 如果角色菜单roleMenus数组对象的id是menu.id，权限添加选中字段
    menu.dataValues.select = roleMenus.some(roleMenu => roleMenu.id === menu.id);
    menu.dataValues.children = []; // 初始化 children 属性
    menuMap.set(menu.id, menu);
  });
  // 构建菜单树
  menus.forEach(menu => {
    if (!menu.pid) {
      // 如果当前菜单的 pid 为 null，则为根菜单
      tree.push(menu);
    } else {
      // 获取父菜单
      const parent = menuMap.get(menu.pid);
      if (parent) {
        // 如果父菜单存在，则将当前菜单添加到父菜单的 children 数组中
        parent.dataValues.children.push(menu);
      }
    }
  });
  // 返回构建好的菜单树
  return tree;
};

module.exports = buildMenuTree;